/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DetectarLineas;

import java.awt.Color;
import java.awt.image.BufferedImage;



/**
 *
 * @author Joaquín  Ortiz Díaz
 */
public class Paso3 {

    public BufferedImage aplica_paso3(BufferedImage a){

        BufferedImage ejemplo = new BufferedImage(a.getWidth(), a.getHeight(), a.getType());

        int width=a.getWidth();
        int height= a.getHeight();

        float maximo;
        float minimo;

        for(int i=0;i<width;i++){
            for(int j=0; j<height;j++){
                //Obtengo el pixel
                int pix = a.getRGB(i,j);

                //Obtengo los valores RGB del pixel
                int rojo = ((pix & 0x00ff0000) >> 16);
                int verde =((pix & 0x0000ff00) >> 8);
                int azul = ((pix & 0x000000ff) >> 0);

                //Obtengo las componentes de HSV

                float rojof=rojo/255;
                float azulf=azul/255;
                float verdef=verde/255;


                maximo=max(rojof,azulf,verdef);
                minimo=min(rojof,azulf,verdef);
                

                //ALGORITMO DE TVI
                //V
                float v=(maximo+minimo)/2;

                //S
                float s=0;
                if (v<=0.5)
                    s=(maximo-minimo)/(maximo+minimo);
                else
                    s=(maximo-minimo)/(2-maximo-minimo);

                //H

                float h=0;

                if (maximo==minimo)
                    h=0;

                if (maximo == rojof)
                    h=(verdef - azulf) / (maximo-minimo);

                if (maximo == verdef)
                    h=2 + ((azulf - rojof) / (maximo - minimo));

                if (maximo == azulf)
                    h=4 + ((rojof - verdef) / (maximo -minimo));

                
                if (h!=0)
                    h=h*60;

                if(h<0)
                    h=h+360;


                 
                //Miramos si le pixel es azul
                if ((h>=180 && h<=300) && (s>0.45) && (v>0.1))
                    ejemplo.setRGB(i, j, (new Color(255,255,255)).getRGB());
                else
                    ejemplo.setRGB(i, j, (new Color(0,0,0)).getRGB());

            }
        }

        return ejemplo;
    }

    public float max (float rojo, float azul, float verde){
        float maximo = rojo;
        if(verde > maximo)
            maximo=verde;
        if(azul > maximo)
            maximo=azul;
        return maximo;
    }

    public float min (float rojo, float azul, float verde){
        float minimo = rojo;
        if(verde < minimo)
            minimo=verde;
        if(azul < minimo)
            minimo=azul;
        return minimo;
    }
}
